/*
 * @Author: songliuyang@58.com
 * @Date: 2021-12-14 14:12:14
 * @LastEditors: songliuyang@58.com
 * @LastEditTime: 2021-12-16 14:57:29
 */
const htmlWebpack = require('html-webpack-plugin')
const entryConfig = require('./productConfig')
const chalk = require('chalk')
const path = require('path')

function resolve (dir) {
  console.log(__dirname, 13)
  return path.join(__dirname, dir)
}
console.log(process.env.name, 'name')
console.log(process.env.NODE_ENV, 'isProduct')
const isProduct =
  process.env.NODE_ENV === 'production' || process.env.NODE_ENV === 'testing'

const buildProjectName = process.argv[3] // 拿到动态打包项目的参数
if (isProduct && !buildProjectName) {
  console.log(
    chalk.yellow(' 请分项目打包上传 ', 'npm run build  xxx  缺少项目名')
  )
  return
}
let devModuleName = '*'
if (!isProduct) {
  if (process.env.name) {
    devModuleName = process.env.name
  } else {
    // 开发的时候指定某个项目入口
    // devModuleName = 'demo'
    // devModuleName = 'projectA'
    devModuleName = 'hyh'
    // devModuleName = 'benefitCarder'
  }
}

module.exports = {
  publicPath: './',
  productionSourceMap: false,
  pages: isProduct
    ? entryConfig.createEntryConfig_build(buildProjectName)
    : entryConfig.createEntryConfig_dev(devModuleName),
  outputDir: 'dist/' + buildProjectName, // 打包文件的存放地址
  lintOnSave: false,
  configureWebpack: (config) => {
    // production
    // html 注入  css  js 等依赖
    if (process.env.NODE_ENV !== 'development') {
      config.plugins.push(
        // eslint-disable-next-line new-cap
        new htmlWebpack({
          filename: 'index.html',
          template: `./src/projectList/${buildProjectName}/index.html`,
          minify: {
            minimize: true, // 是否打包为最小值
            removeAttrbuteQuotes: true, // 去除引号
            removeComments: true, // 去掉注释
            collapseWhitespace: true, // 去掉空格
            minifyCss: true, // 压缩css
            removeEmptyElements: false // 清理内容为空的元素
          },
          // 需要在template title中 <%= htmlWebpackPlugin.options.title %>
          // title: `${buildProjectName}打包的页面`,
          inject: true, // 是否将打包内容 :true | ‘head’ | ‘body’ | false 。把所有产出文件注入到给定的 template 或templateContent。当传入 true或者 ‘body’时所有javascript资源将被放置在body元素的底部，“head”则会放在head元素内。
          // chunks: [], // 引入对应的js(对应(entry)中的入口文件)
          hash: true // 是否开启hash 引入产出的资源时加上哈希避免缓存
          // meta: { verson_sly: `v-${appVision}` }
        })
      )
      // config.plugins.push(new MyReplasePlugin())
      // config.plugins.push(new VueLoaderPlugin())
    }
  },
  chainWebpack: (config) => {
    // 文件目录别名映射
    config.resolve.alias
      .set('@', resolve('src'))
      .set('@cpn', resolve('src/components'))
    // 配置pug模板语法支持
    // config.module
    //   .rule('pug')
    //   .test(/\.pug$/)
    //   .use('pug-html-loader')
    //   .loader('pug-html-loader')
    // config.module
    //   .rule('vue')
    //   .test(/\.vue$/)
    //   .use('vue-loader')
    //   .loader('vue-loader')
    //   .end()
  },
  devServer: {
    open: true, // 是否 自动打开浏览器 在项目启动的时候
    host: 'localhost',
    port: 8087// 端口
  }
}
